package demo2;

import java.util.Scanner;

//尝试解决

/**
 * 为什么这样子他可以解决
 * 因为println是一个同步方法（内部有synchronized，他会触发内存屏障，让t1，缓存中的值失效，只能从主内存中读取新的flag值，此时就发现了flag
 * 已经被更新了），虽然打印的是count，但是仍会让缓存失效，flag的也会失效，从主内存中读取
 */
public class DEMO_01 {
    static int flag = 0;
    static int count=1;
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("t1线程启动");
            while (flag == 0) {
                System.out.println(count);
            }
            System.out.println("t1线程结束");
        });

        Thread t2 = new Thread(() -> {
            System.out.println("t2线程启动");
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个非零整数");
            flag = scanner.nextInt();
            System.out.println("t2线程结束");
        });
        //启动线程
        t1.start();
        t2.start();
    }
}
